package com.lst.tools.mybatis.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.io.Serializable;
import java.util.Collection;
import java.util.Map;

/**
 * 基础业务层接口，便于扩展
 *
 * @author: Frank
 * @date: 2019/09/24 13:51
 * @version: V1.0
 */
public interface IBaseService<T> extends IService<T> {

    /**
     * 分页查询
     *
     * @param currentPage 当前页
     * @param pageSize    查询记录条数
     * @return
     */
    IPage<T> page(long currentPage, long pageSize);

    /**
     * 分页查询
     *
     * @param currentPage  当前页
     * @param pageSize     查询记录条数
     * @param queryWrapper 查询对象
     * @return
     */
    IPage<T> page(long currentPage, long pageSize, Wrapper<T> queryWrapper);

    /**
     * 条件不存在时保存
     *
     * @param t            对象
     * @param queryWrapper 条件对象
     * @return
     */
    int saveNotExist(T t, Wrapper<T> queryWrapper);

    /**
     * 根据字段名和条件获取数据，并且封装已字段名的值作为key，对象为value封装成mapper
     *
     * @param keyFieldName 字段名
     * @param queryWrapper 查询对象
     * @return
     */
    Map<Long, T> getObjectMapByLongField(String keyFieldName, Wrapper<T> queryWrapper);

    /**
     * 根据字段名和条件获取数据，并且封装已字段名的值作为key，对象为value封装成mapper
     *
     * @param keyFieldName 字段名
     * @param queryWrapper 查询对象
     * @return
     */
    Map<String, T> getObjectMapByStringField(String keyFieldName, Wrapper<T> queryWrapper);

    /**
     * 根据id集合获取数据，并且封装已字段名的值作为key，对象为value封装成mapper
     *
     * @param ids id集合
     * @return
     */
    Map<Long, T> getMapByIds(Collection<? extends Serializable> ids);

    /**
     * 获取数据，并且封装已字段名的值以id作为key，对象为value封装成mapper
     *
     * @return
     */
    Map<Long, T> getAllMap();
}
